﻿using System;
using System.Xml;
using Core.Library;
using DataObject;
using DataObject.Customer;

public partial class Controls_Customer_Register : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        rfvFullname.ErrorMessage        = "(*) - Nhập họ tên";
        rfvtRUserName.ErrorMessage      = "(*) - Nhập tên đăng nhập";
        rfvRPassword.ErrorMessage       = "(*) - Nhập mật khẩu";
        rfvRRePassword.ErrorMessage     = "(*) - Nhập xác nhận mật khẩu";
        rfvAddress.ErrorMessage         = "(*) - Nhập địa chỉ";
        rfvMobile.ErrorMessage          = "(*) - Nhập số điện thoại";
        rfvEmail.ErrorMessage           = "(*) - Nhập địa chỉ hòm thư";
        revEmail.ErrorMessage           = "(*) - Hòm thư sai";
        rfvCaptchaControl.ErrorMessage  = "(*) - Nhập mã xác nhận";

        Page.Title = string.Format(".: Đăng nhập & Đăng ký {0} :.", Constants.SITE_TITLE);    
    }
   
    #region Buttons

    protected void BtnRegister(object sender, EventArgs e)
    {
        try
        {
            // Kiểm tra mật khẩu
            if (txtPassword.Text != txtRePassword.Text)
            {
                ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Mật khẩu và xác nhận mật khẩu không khớp.", MessageType.Warning);
                return;
            }

            // Kiểm tra tồn tại của người dùng
            if (CustomerController.Customer_CheckUsernameExist(txtUserName.Text) > 0)
            {
                ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Tên đăng nhập này đã được sử dụng. Bạn vui lòng chọn tên khác.", MessageType.Information);
                return;
            }

            // Kiểm tra tồn tại của hòm thư            
            if (CustomerController.Customer_CheckEmailExist(txtEmail.Text) > 0)
            {
                ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Email này đã được đăng kí. Nếu bạn quên mật khẩu thì hãy sử dụng chức năng \"Quên mật khẩu?\" và một mật khẩu mới sẽ được gửi cho bạn.", MessageType.Information);
                return;
            }

            // Kiểm tra mã xác nhận            
            var inputSecurityCode = txtCaptchaControl.Text;

            if (Session["SecuritySession"].ToString() != inputSecurityCode)
            {
                ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Mã xác nhận không chính xác.", MessageType.Warning);
                return;
            }

            // Tạo người dùng mới
            var customer = new CustomerObject
            {
                ContactName = txtFullName.Text,
                Username    = txtUserName.Text,
                Password    = SecurityUtility.MD5Encrypt(txtPassword.Text.Trim()),
                Mobile      = txtMobile.Text,
                Email       = txtEmail.Text,
                Address     = txtAddress.Text,
                IsActive    = true,
            };

            var customerId = CustomerController.Customer_Create(customer);            
            if (customerId > 0)
            {                
                // Đăng ký thành công gửi mail kích hoạt tài khoản
                var o = CustomerController.Customer_GetById(customerId);
                if (o != null)
                    ActiveMail(o.ContactName, o.Username, o.Email, txtPassword.Text.Trim());

                ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Đăng ký thành công. Thông tin tài khoản của bạn đã được gửi vào hòm thư " + o.Email, MessageType.Success);
            }                                   
        }
        catch
        {
            ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Đăng ký không thành công. Xin vui lòng quay lại sau", MessageType.Failure);
        }
    }

    protected void BtnReset(object sender, EventArgs e)
    {
        txtFullName.Text    = string.Empty;
        txtUserName.Text   = string.Empty;
        txtPassword.Text   = string.Empty;
        txtRePassword.Text = string.Empty;
        txtAddress.Text     = string.Empty;
        txtMobile.Text      = string.Empty;
        txtEmail.Text       = string.Empty;
    }

    #endregion

    #region Active Mail

    private void ActiveMail(string contactName, string username, string email, string password)
    {
        var doc = new XmlDocument();
        doc.Load(Server.MapPath("App_Data/Active.xml"));
        var node = doc.SelectSingleNode("emails/email[@id='Active']");

        // Set info from xml file in to email   
        var childNode = node.SelectSingleNode("subject");

        // Subject: ...
        var subject = string.Format("Thông tin đăng ký - www.denhongphuc.vn");
        // Body: ...
        childNode = node.SelectSingleNode("body");
        var body = childNode.InnerText;

        body = body.Replace("[Subject]", subject);
        body = body.Replace("[ContactName]", contactName);
        body = body.Replace("[Username]", username);
        body = body.Replace("[Password]", password);

        var checkMail = MailUtility.Send(email, subject, body);
        if (checkMail)
            ltMessage.Text = MessageUtility.ShowMessage(string.Empty, 
                                string.Format("Thông tin tài khoản của bạn đã được gửi vào hòm thư {0}", email), MessageType.Success);
    }

    #endregion

}